/*
 * lista_ligada.c
 *
 *  Created on: 09/04/2011
 *      Author: joao
 */

#include "lista_ligada.h"

#include <stdio.h>
#include <stdlib.h>


/*Inicializa a lista*/
void Inicializa(TipoDaPosicao *L){
	*L = NULL;
}

//TipoDaPosicao primeiro ()

/* Devolve a posicao do proximo elemento da lista*/
TipoDaPosicao proximo(TipoDaPosicao p){
	return p->prox;
}

/* Devolve o valor armazenado na posicao p da lista */
TipoDoElemento acessa (TipoDaPosicao p){
	return p->info;
}

/* Insere um elemento no inicio da lista*/
void Insere(TipoDaPosicao *c ,TipoDoElemento x){
	TipoDaPosicao paux ;

	paux=(No*) malloc (sizeof(No));
	paux->info=x;
	paux->prox=*c;
	*c=paux;
}


//Busca x na lista e devolve o ponteiro do elemento.
TipoDaPosicao Busca (TipoDaPosicao *c ,TipoDoElemento x){
	TipoDaPosicao q;

	q = *c;
	while (q != NULL) {
		if (q->info == x)
			return q;
		q = q->prox;
	}
	return NULL;
}

// Busca elemento anterior ao elemento p e devolve ponteiro.
TipoDaPosicao BuscaAnterior (TipoDaPosicao p, TipoDaPosicao *c){
	TipoDaPosicao q;

	q = *c;
	while (q != NULL) {
		if (q->prox == p)
			return q;
		q = q->prox;
	}
	return NULL;
}

//Remove elemento p da lista.
void Remove(TipoDaPosicao p, TipoDaPosicao *c){
	TipoDaPosicao a;

	a = BuscaAnterior(p, c);
	if (a != NULL)
		a->prox = p->prox;
	else *c = p->prox;

}

int Vazia(TipoDaPosicao *c){
	if(*c == NULL)return 1;
	else return 0;
}
